package api

import (
	"fmt"
	"time"
)

func init() {
	fmt.Println("api模块初始化成功……")
}

func Welcome() {
	fmt.Printf("欢迎陈文小超来到今日的golang语言学习，%v\n", time.Now())
}

// CalcModule 运算符
func CalcModule() {
	// 整型除以整型结果还是整型
	fmt.Println(10 / 4) // 2

	var n1 float32 = 10 / 4
	fmt.Println(n1) // 2

	var n2 float32 = 10.0 / 4
	fmt.Println(n2) // 2.5

	var n3 float32 = 10 / 4.0
	fmt.Println(n3) // 2.5

	// 取模运算:计算公式 a % b = a - a / b * b;或者结果数的正负和被除数的符号保持一致
	fmt.Println(10 % 3)   // 1
	fmt.Println(-10 % 3)  // -1
	fmt.Println(10 % -3)  // 1
	fmt.Println(-10 % -3) // -1

	// ++ -- 只能独立使用
	var i int = 8
	var a int
	i++
	a = i
	fmt.Println(i)
	fmt.Println(a)

	// 小练习
	var days int = 97
	var weeks int = days / 7
	var day int = days % 7
	fmt.Printf("还有%v周，%v天\n", weeks, day)
	fmt.Println("----")

	// 不引用中间变量直接交换两个变量的值
	var a1 int = 10
	var b1 int = 20
	fmt.Printf("交换前a的值是：%v,交换前b的值是：%v\n", a1, b1)
	a1 = a1 + b1
	b1 = a1 - b1
	a1 = a1 - b1
	fmt.Printf("交换后a的值是：%v,交换后b的值是：%v\n", a1, b1)

	// 指针和地址
	a2 := 100
	fmt.Printf("a的地址是：%v\n", &a2)
	var b2 *int
	b2 = &a2
	fmt.Printf("b2的地址是：%v,b2的值地址对应的值是：%v,b2赋值后的值是：%v\n", &b2, *b2, b2)

	// 求最大值
	a3 := 200
	a4 := 300
	a5 := 500
	var max int
	if a3 > a4 {
		max = a3
	} else {
		max = a4
	}

	if max > a5 {
		fmt.Printf("最大值是：%v\n", max)
	} else {
		fmt.Printf("最大值是：%v\n", a5)
	}

	fmt.Println("----")

	var name string
	var age byte
	var val float32
	var isPass bool
	fmt.Println("请输入姓名：")
	fmt.Scanln(&name)

	fmt.Println("请输入年龄：")
	fmt.Scanln(&age)

	fmt.Println("请输入成绩：")
	fmt.Scanln(&val)

	fmt.Println("请输入是否通过考试：")
	fmt.Scanln(&isPass)

	fmt.Printf("名字是：%v,年龄是：%v,成绩是：%v,是否通过考试：%v", name, age, val, isPass)
}

// RadixModule 进制练习
func RadixModule() {
	var i int = 5
	fmt.Printf("二进制对应的值:%b", i)

	var j int = 011 // go可以直接表示八进制 0开头的
	fmt.Println("八进制对应的值：", j)
}

// PostModule 位运算练习
func PostModule() {
	var a int = 1 >> 2
	var b int = -1 >> 2
	var c int = 1 << 2
	var d int = -1 << 2
	fmt.Println(a, b, c, d)
}
